#pragma once
#include "base/Singleton.h"
#include "base/RefCounted.h"
namespace xBase
{
    class CxMessageLoopMgr : public CRefCountedThreadSafe<CxMessageLoopMgr>
    {
    public:
        CxMessageLoopMgr();

        ~CxMessageLoopMgr();

        BOOL Initialize();

        BOOL SetMessageLoopPointer(DWORD dwThreadID, LONG * pMessageLoop);

        BOOL GetMessageLoopPointer(DWORD dwThreadID, LONG ** ppMessageLoop);

        BOOL GetThreadID(LONG* pMessageLoop, DWORD* pTheadID);

    private:
        CxLock m_Locker;
        std::map<DWORD, LONG *> m_mapMessageLoopPointer;
        std::map<LONG *, DWORD> m_mapThreadID;
        BOOL                    m_bInit;

        DECLARE_SINGLETON_CLASS(CxMessageLoopMgr)
    };

    typedef TxSingleton<CxMessageLoopMgr> MessageLoopMgr;
}